﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MusicMaker
{
    public class Pattern
    {
        //pattern的名称
        public string Name;

        //pattern的开始时间
        public int BeginTime;

        //pattern的音符列表
        public List<Note> NoteList = new();

        //pattern的持续时间，不储存，动态计算
        public int Duration
        {
            //访问时调用的方法
            //返回最后结束的那个音符是什么时候结束的
            get
            {
                int max_end = 0;
                //遍历列表中的所有音符，找出最后的结束时间
                foreach(Note note in NoteList)
                {
                    max_end = Math.Max(max_end, note.Begin + note.Time);
                }
                return max_end;
            }

            //这是一个只读属性，不能写入，所以没有set方法
        }

        //pattern的最高音，动态计算
        public int MaxPitch => NoteList[NoteList.Max(t => t.Pitch)].Pitch;

        //pattern的最低音，动态计算
        public int MinPitch => NoteList[NoteList.Min(t => t.Pitch)].Pitch;

        /*
         Pattern的格式
        pattern("name", begin_time)[<Note 1><Note 2>...<Note n>]
         */

        public override string ToString()
        {
            string head = string.Format("pattern(\"{}\",{})", Name, BeginTime);
            string body = "[";
            foreach(Note note in NoteList)
            {
                body += note.ToString();
            }
            body += "]";
            return head + body;
        }
    }
}
